﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Sistema_Totem.Datos.SqlServer;
using Sistema_Totem.Logica.Excepciones;


namespace Sistema_Totem.Logica.Clases
{
    public class Actor
    {
        private int idActor;
        private String nombre;
        private String descripcion;
        private String estatus;

        #region Constructores 

        public Actor()
        {

        }

        public Actor(int nuevoidActor, String nuevonombre, String nuevodescripcion, String nuevoestatus)
        {
            IdActor = nuevoidActor;
            Nombre = nuevonombre;
            Descripcion = nuevodescripcion;
            Estatus = nuevoestatus;
            
        }

        public Actor(int nuevoidActor, String nuevonombre)
        {
            IdActor = nuevoidActor;
            Nombre = nuevonombre;

        }

        public Actor(String nuevonombre, String nuevodescripcion, String nuevoestatus)
        {
             Nombre = nuevonombre;
             Descripcion= nuevodescripcion;
             Estatus = nuevoestatus;
        }

        #endregion Constructores

        #region Encapsulamiento de Atributos

        /// <summary>
        /// Metodos Getters y Setters.
        /// </summary>

        public int IdActor
        {
            get { return idActor; }
            set { idActor = value; }
        }

        public String Nombre
        {
            get { return nombre; }
            set { nombre = value; }
        }

        public String Descripcion
        {
            get { return descripcion; }
            set { descripcion = value; }
        }

        public String Estatus
        {
            get { return estatus; }
            set { estatus = value; }
        }

        #endregion Encapsulamiento de Atributos

        #region Metodo Equals

        /// <summary>
        /// Metodo Equals de la clase.
        /// </summary>

        public  override bool Equals(Object obj)
        {
            if (obj == null || GetType() != obj.GetType())
            {

               return false;
            }


            Actor a = (Actor)obj;

            return (IdActor == a.IdActor) && (Nombre == a.Nombre) && (Descripcion == a.Descripcion) && (Estatus == a.Estatus);

            
        }


      
        #endregion Metodo Equals

        #region Metodo Agregar Actor

        /// <summary>
        /// Este metodo hace el llamado a la capa de datos para agregar el actor
        /// </summary>
        /// <param name="nuevo">Recibe un objeto del tipo actor</param>
        /// <param name="idProy">Recibe el id del proyecto actual</param>
        /// <returns>Retorna el mensaje de confirmacion de la accion</returns>
        public int AgregarActor(Actor nuevo, int idProy)
        {
            SqlServerActor sqlActor = new SqlServerActor();
            return sqlActor.AgregarActor(nuevo, idProy.ToString());
        }

        #endregion Metodo Agregar Actor

        #region Asignar Actor a CU

        /// <summary>
        /// Llama a la capa de datos para asignar un actor al caso de uso
        /// </summary>
        /// <param name="idActor">el id del actor</param>
        /// <param name="idCasoDeUso">el id del caso de uso</param>
        /// <returns>Int de confirmacion</returns>
        public int AsignarActor(int idActor, int idCasoDeUso)
        {
            SqlServerActor sqlActor = new SqlServerActor();
            return sqlActor.AsignarActor(idActor, idCasoDeUso.ToString());
        }

        #endregion Asignar Actor a CU

        #region Quitar Actor de CU

        /// <summary>
        /// Llama a la capa de datos para des-asignar un actor al caso de uso
        /// </summary>
        /// <param name="idActor">el id del actor</param>
        /// <param name="idCasoDeUso">el id del caso de uso</param>
        /// <returns>Int de confirmacion</returns>
        public int QuitarActor(int idActor, int idCasoDeUso)
        {
            SqlServerActor sqlActor = new SqlServerActor();
            return sqlActor.QuitarActorCasoDeUso(idActor, idCasoDeUso.ToString());
        }

        #endregion Quitar Actor de CU


        #region Metodo Obtener Id Proyecto

        /// <summary>
        /// Este metodo hace el llamado a la capa de datos para obtener el id del proyecto actual
        /// </summary>
        /// <param name="idProy">Recibe el nombre del proyecto</param>
        /// <returns>Int con el id del proyecto</returns>
        public int ObtenerIdProyecto(string idProy)
        {
            SqlServerActor sqlActor = new SqlServerActor();
            return sqlActor.ObtenerIdProyecto(idProy);
        }

        #endregion Metodo Obtener Id Proyecto


        #region Metodo Obtener Id Actor

        /// <summary>
        /// Este metodo hace el llamado a la capa de datos para obtener el id del actor 
        /// </summary>
        /// <returns>El id del actor siguiente a insertar</returns>
        public int ObtenerId()
        {
            SqlServerActor sqlActor = new SqlServerActor();
            return sqlActor.ObtenerUltimoActor();
        }

        #endregion Metodo Obtener Id Actor

        #region Metodo Eliminar Actor

        /// <summary>
        /// Este metodo hace el llamado a la capa de datos para eliminar el actor
        /// </summary>
        /// <param name="idActor">Recibe el id del actor a eliminar</param>
        /// <returns>Int de confirmacion</returns>
        public int EliminarActor(int idActor)
        {
            SqlServerActor sqlActor = new SqlServerActor();
            return sqlActor.EliminarActor(idActor);
        }

        #endregion Metodo Eliminar Actor

        #region Consultar Detalle Actor

        /// <summary>
        /// Este metodo hace el llamado a la capa de datos para obtener el detalle del actor
        /// </summary>
        /// <param name="idActor">Recibe el id del actor a consultar</param>
        /// <returns>Objeto actor</returns>
        public Actor ConsultarDetalleActor(int idActor)
        {
            SqlServerActor sqlActor = new SqlServerActor();
            return sqlActor.ConsultarDetalleActor(idActor);
        }

        #endregion Consultar Detalle Actor


        #region Listar Actores por Proyecto

        /// <summary>
        /// Este metodo hace el llamado a la capa de datos para obtener actores por proyecto
        /// </summary>
        /// <param name="idProy">Recibe el id del proyecto</param>
        /// <returns>La lista de actores de ese proyecto</returns>
        public List<Actor> ListarActores(int idProy)
        {
            List<Actor> misActores = null;
            
         
                SqlServerActor sqlActor = new SqlServerActor();
                misActores= sqlActor.ConsultarActor(idProy);
                if (misActores.Count == 0)
                {
                    throw (new ActorExcepcion("No hay actores en el proyecto"));
                }
                else
                {
                    return misActores;
                }
            
           
        }

        #endregion Listar Actores por Proyecto

        #region Metodo Modificar Actor

        /// <summary>
        /// Este metodo hace el llamado a la capa de datos para modificar el actor
        /// </summary>
        /// <param name="nuevo">Recibe un objeto actor con los datos nuevos</param>
        /// <param name="idActorViejo">Recibe el id del actor a modificar</param>
        /// <returns>Int de confirmacion</returns>
        public int ModificarActor(Actor nuevo, int idActorViejo)
        {
            SqlServerActor sqlActor = new SqlServerActor();
            return sqlActor.EditarActor(nuevo, idActorViejo);
        }

        #endregion Metodo Modificar Actor

        #region Listar Actores por CU

        /// <summary>
        /// Este metodo hace el llamado a la capa de datos para obtener los actores de un caso de uso
        /// </summary>
        /// <param name="idCU">Recibe el id del caso de uso</param>
        /// <returns>La lista de actores que tiene el caso de uso</returns>
        public List<Actor> ListarActoresPorCu(int idCU)
        {
            SqlServerActor sqlActor = new SqlServerActor();
            return sqlActor.ConsultarActorCasoDeUso(idCU);
        }

        #endregion Listar Actores por CU
    }

}